import os.path
import sys

import pandas
from Excel import count

# 学生管理系统

# 文件保存路径
# 规定文件中数据保存格式为：id\tname\tgender\tclass\n
filepath = "./Student.txt"
# 存储数据的execl表格
excelpath= "./Student2.xlsx"

# 存储所有学生信息的列表
students=[]

# 保存数据到文件中
def savefile():
    with open(filepath,'w',encoding='utf-8') as f:
        for s in students:
            f.write(f"{s['id']}\t{s['name']}\t{s['gender']}\t{s['class']}\n")
    print(f"学生数据保存成功，共{len(students)}条信息。")

# 加载文件数据到内存中
def loadfile():
    if not os.path.exists(filepath):
        return

    global students
    with open(filepath,'r',encoding='utf-8') as f:
        for line in f:
            # 去掉开头和末尾的空白符(包括换行符)
            line=line.strip()
            # print(f'line:{line}')
            # 按照规定的分隔符进行切分
            datas=line.split('\t')
            if len(datas)!=4:
                print(f"[{line}]数据有问题！")
                continue
            s={
                'id':datas[0],
                'name':datas[1],
                'gender':datas[2],
                'class':datas[3]
            }
            students.append(s)
    print(f"学生数据加载成功，共{len(students)}条数据。")

# 保存数据到excel表格中
def saveexcel():
    # 确保文件存在
    os.makedirs(os.path.dirname(excelpath), exist_ok=True)
    # 将字典列表转换为DataFrame
    df = pandas.DataFrame(students, columns=['id', 'name', 'gender', 'class'])

    # 保存到Excel（默认保存为第一个工作表）
    df.to_excel(excelpath, index=False, engine='openpyxl')
    print(f"学生数据保存成功，共{len(students)}条信息。")


# 从Excel加载数据
def loadexcel():
    if not os.path.exists(excelpath):
        print("文件不存在")
        return

    global students
    # 读取Excel文件,指定id列为字符串
    df = pandas.read_excel(excelpath, engine='openpyxl',dtype={'id': str})

    # 转换为字典列表格式
    students = df.to_dict('records')

    # 数据有效性验证
    valid_count = 0
    for s in students:
        if len(s) == 4 and all(s.values()):  # 检查4个字段且无空值
            valid_count += 1
        else:
            print(f"无效数据行：{s}")

    print(f"学生数据加载成功，有效数据{valid_count}条，总数据{len(students)}条")




# 打印菜单
def menu():
    print("----------------------------------------")
    print("---- 1. 新增学生信息   2. 显示所有同学信息----")
    print("---- 3. 查找学生信息   4. 删除学生信息   ----")
    print("---- 0. 退出程序                      ----")
    print("----------------------------------------")
    choice = input("请输入您的选择: ")
    return int(choice)

# 插入信息
def insert():
    print("-------新增学生信息-------")
    id=input("请输入学生id：")
    name=input("请输入学生名字：")
    gender=input("请输入学生性别：")
    classid=input("请输入学生班级：")
    if gender not in ('男','女'):
        print("输入性别有误，新增数据失败！")
        return

    student={
        'id':id,
        'name':name,
        'gender':gender,
        'class':classid
    }
    global students
    students.append(student)
    print("新增学生数据成功！")


# 展示信息
def show():
    print("全部学生信息：")
    # print("id\tname\tgender\tclass")
    global students
    for s in students:
        print(f"{s['id']}\t{s['name']}\t{s['gender']}\t{s['class']}")


# 删除信息
def delete():
    # input返回值是字符串类型
    id=input("请输入要删除的学生学号：")
    global students
    for s in students:
        if s['id']==id:
            print(f"删除[{s['id']}\t{s['name']}\t{s['gender']}\t{s['class']}]学生信息！")
            students.remove(s)

# 查找信息
def find():
    print("开始查找....")
    name=input("请输入要查找的学生名字：")
    count=0
    for s in students:
        if s['name']==name:
            print(f"[{s['id']}\t{s['name']}\t{s['gender']}\t{s['class']}]")
            count+=1

    print(f"共找到{count}条信息！")

# 主函数
def main():
     print('+--------------------------+')
     print('|    欢迎来带学生管理系统!     |')
     print('+--------------------------+')
     # loadfile()
     loadexcel()
     while True:
         choice = menu()
         if choice == 0:
            # savefile()
            saveexcel()
            sys.exit(0)
         if choice == 1:
            insert()
         elif choice == 2:
            show()
         elif choice == 3:
            find()
         elif choice == 4:
            delete()
         else:
            print('输入有误! 请重新输入!')


main()